package com.stylefeng.guns.rest.modular.App.dao;

import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.stylefeng.guns.rest.modular.App.model.OrderInf;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

/**
 * 
 * 订单信息表 Mapper 接口 
 * @author 张亚林
 * @Date 2018-11-12 17:32
 */
@Mapper
public interface OrderInfMapper extends BaseMapper<OrderInf> {
    /**
     * 查询订单信息列表
     * @param orderInf 订单信息对象
     * @return
     */
    List<OrderInf> selectListOrderInf(OrderInf orderInf)throws Exception;
    /**
     * 分页查询订单信息列表
     * @param page  分页对象
     * @param orderInf 系统操作对象
     * @return
     * @Date 2018-10-02
     */
    List<OrderInf> selectListOrderInf(Page page, OrderInf orderInf)throws Exception;

    /**
     * 通过主键ID查询订单信息对象
     * @param id 主键id
     * @return
     */
    OrderInf findOrderInfById(String id)throws Exception;

    /**
     * 乘客下单
     * @param orderInf
     * @return
     */
    int insertOrderInf(OrderInf orderInf) throws Exception ;
    /**
     * 更新订单信息
     * @param orderInf
     * @return
     */
    int updateOrderInf(OrderInf orderInf) throws Exception;

    /**
     * 乘客上车 将乘客状态变成已上车，并且更新上车时间 上车位置 上车坐标
     * @param orderInf
     * @return
     * @throws Exception
     */
    int updateOrderInfUp(OrderInf orderInf) throws Exception;

    /**
     * 恢复上车 将上车时间 上车地点 上车坐标置空标
     * @param orderInf
     * @return
     * @throws Exception
     */
    int updateOrderInfRegainUp(OrderInf orderInf) throws Exception;

    /**
     * 乘客下车 将乘客状态变成已下车，并且更新下车时间 下车位置 下车坐标
     * @param orderInf
     * @return
     * @throws Exception
     */
    int updateOrderInfDown(OrderInf orderInf) throws Exception;
    /**
     * 恢复下车 将下车时间 下车地点 下车坐标置空
     * @param orderInf
     * @return
     * @throws Exception
     */
    int updateOrderInfRegainDown(OrderInf orderInf) throws Exception;
    /**
     * 更新乘客状态
     * @param orderInf
     * @return
     * @throws Exception
     */
    int updateOrderInfCustomState(OrderInf orderInf) throws Exception;

    /**
     * 取消订单 乘客状态修改成已经取消 占座有效时间表示为null
     * @param orderInf
     * @return
     * @throws Exception
     */
    int updateOrderInfCustomStateCancel(OrderInf orderInf) throws Exception;

    /**
     * 恢复取消订单 乘客状态修改成未乘车 占座有效时间表示当前时间延后XXX分钟
     * @param orderInf
     * @return
     * @throws Exception
     */
    int updateOrderInfCustomStateRestCancel(OrderInf orderInf) throws Exception;
    /**
     * 更新订单状态为已支付
     * @param orderInf
     * @return
     * @throws Exception
     */
    int updateOrderInfPayState(OrderInf orderInf) throws Exception;
    /**
     * 查询下单 未支付并且过期的订单
     * @return
     * @throws Exception
     */
    List<OrderInf> selectListOrderInfForClearTicket()throws Exception;

    /**
     *查询锁 获取对象信息
     * @param id
     * @return
     * @throws Exception
     */
    OrderInf findOrderInfForUpdate(String id)throws Exception;
    /**
     *查询锁 获取对象信息
     * @param qrcode 乘车码
     * @return
     * @throws Exception
     */
    OrderInf findOrderInfByQrcodeForUpdate(String qrcode)throws Exception;


    /**
     * 乘客我的订单
     * @param page  分页对象
     * @param orderInf 系统操作对象
     * @return
     * @Date 2018-10-02
     */
    List<OrderInf> selectCustomerListOrderInf(Page page, OrderInf orderInf)throws Exception;

    /**
     * 乘客我的订单
     * @param orderInf 系统操作对象
     * @return
     * @Date 2018-10-02
     */
    List<OrderInf> selectCustomerListOrderInf(OrderInf orderInf)throws Exception;
}
